package bank;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class _06ConvertStr {
    public static String convert(String s, int numRows) {
        //注意这里必须考虑该情况，否则以下表达式中除数可能为0！！！
        if(numRows == 1){
            return s;
        }
        int len = s.length();
        char[] charArray = s.toCharArray();
        //如果使用二维数组法的话，经过数学推理，目标二维数组的列数最好预设为这样：
        //int numLines = (s.length()/((numRows-1)*2)+1)*(numRows-1);
        List<Character> list = new ArrayList<>();
        //依次按行的规则添加元素
        for(int i = 0;i<numRows;i++){
            for(int j = 0;j<charArray.length;j++){
                //这个数学表达式非常重要，是算法的核心
                if(j%(2*numRows-2)==i || j%(2*numRows-2)==(2*numRows-2-i)){
                    //row
                    list.add(charArray[j]);
                }
            }
        }
        Iterator iterator = list.iterator();
        char[] chars = new char[len];
        //计数器
        int i = 0;
        while (iterator.hasNext()){
            chars[i++] = (char)iterator.next();
        }
        String str = new String(chars);
        return str;
    }
}
